2db9e9482d554afba33d0a2066fd41350babd535,src/org/opencms/db/generic/CmsHistoryDriver.java,CmsHistoryDriver,deleteEntries,#CmsDbContext#I_CmsHistoryResource#number#number#,124

Before Change


                }
            }

            if ((maxVersion - versionsToKeep) <= 0) {
                // nothing to delete
                internalCleanup(dbc, resource);
                return 0;
            }

            // get the minimal structure publish tag to keep for this sibling
            int minStrPublishTagToKeep = -1;
            conn = m_sqlManager.getConnection(dbc);
            stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_READ_MAXTAG_FOR_VERSION");
            stmt.setString(1, resource.getStructureId().toString());
            stmt.setInt(2, (1 + maxVersion) - versionsToKeep);
            res = stmt.executeQuery();
            if (res.next()) {
                minStrPublishTagToKeep = res.getInt(1);
                while (res.next()) {
                    // do nothing only move through all rows because of mssql odbc driver
                }
            } else {
                // make sure the statement and the result is closed
                m_sqlManager.closeAll(dbc, conn, stmt, res);
                // nothing to delete
                internalCleanup(dbc, resource);
                return 0;
            }
            m_sqlManager.closeAll(dbc, conn, stmt, res);
            if (minStrPublishTagToKeep < 1) {
                // nothing to delete
                internalCleanup(dbc, resource);
                return 0;
            }
            minStrPublishTagToKeep++;

            // delete the properties
            conn = m_sqlManager.getConnection(dbc);
            stmt = m_sqlManager.getPreparedStatement(conn, "C_PROPERTIES_HISTORY_DELETE");
            stmt.setString(1, resource.getStructureId().toString());
            stmt.setInt(2, minStrPublishTagToKeep);
            stmt.executeUpdate();
            m_sqlManager.closeAll(dbc, null, stmt, null);

            // delete the structure entries
            stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_DELETE");
            stmt.setString(1, resource.getStructureId().toString());
            stmt.setInt(2, minStrPublishTagToKeep);
            int structureVersions = stmt.executeUpdate();
            m_sqlManager.closeAll(dbc, null, stmt, null);

            // get the minimal resource publish tag to keep, 
            // all entries with publish tag less than this will be deleted

After Change


            stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_MAXVER");
            stmt.setString(1, resource.getStructureId().toString());
            res = stmt.executeQuery();
            boolean noHistoryStructure = false;
            if (res.next()) {
                maxVersion = res.getInt(1);
                noHistoryStructure |= res.wasNull();
                while (res.next()) {
                    // do nothing only move through all rows because of mssql odbc driver
                }
            } else {
                // make sure the connection is closed
                m_sqlManager.closeAll(dbc, conn, stmt, res);
                // nothing to delete
                internalCleanup(dbc, resource);
                return 0;
            }
            m_sqlManager.closeAll(dbc, conn, stmt, res);

            if (time >= 0) {
                int maxVersionByTime = -1;
                conn = m_sqlManager.getConnection(dbc);
                // get the maximal version to keep for this resource based on the time parameter
                stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_MAXVER_BYTIME");
                stmt.setString(1, resource.getStructureId().toString());
                stmt.setLong(2, time);
                res = stmt.executeQuery();
                if (res.next()) {
                    maxVersionByTime = res.getInt(1);
                    while (res.next()) {
                        // do nothing only move through all rows because of mssql odbc driver
                    }
                }
                m_sqlManager.closeAll(dbc, conn, stmt, res);
                if (maxVersionByTime > 0) {
                    if (versionsToKeep < 0) {
                        versionsToKeep = (maxVersion - maxVersionByTime);
                    } else {
                        versionsToKeep = Math.min(versionsToKeep, (maxVersion - maxVersionByTime));
                    }
                }
            }
            int structureVersions = 0;

            conn = m_sqlManager.getConnection(dbc);
            if (!noHistoryStructure) {
                if (((maxVersion - versionsToKeep) <= 0)) {
                    // nothing to delete
                    internalCleanup(dbc, resource);
                    return 0;
                }

                // get the minimal structure publish tag to keep for this sibling
                int minStrPublishTagToKeep = -1;

                stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_READ_MAXTAG_FOR_VERSION");
                stmt.setString(1, resource.getStructureId().toString());
                stmt.setInt(2, (1 + maxVersion) - versionsToKeep);
                res = stmt.executeQuery();
                if (res.next()) {
                    minStrPublishTagToKeep = res.getInt(1);
                    while (res.next()) {
                        // do nothing only move through all rows because of mssql odbc driver
                    }
                } else {
                    // make sure the statement and the result is closed
                    m_sqlManager.closeAll(dbc, conn, stmt, res);
                    // nothing to delete
                    internalCleanup(dbc, resource);
                    return 0;
                }
                m_sqlManager.closeAll(dbc, conn, stmt, res);
                if (minStrPublishTagToKeep < 1) {
                    // nothing to delete
                    internalCleanup(dbc, resource);
                    return 0;
                }
                minStrPublishTagToKeep++;

                // delete the properties
                conn = m_sqlManager.getConnection(dbc);
                stmt = m_sqlManager.getPreparedStatement(conn, "C_PROPERTIES_HISTORY_DELETE");
                stmt.setString(1, resource.getStructureId().toString());
                stmt.setInt(2, minStrPublishTagToKeep);
                stmt.executeUpdate();
                m_sqlManager.closeAll(dbc, null, stmt, null);

                // delete the structure entries
                stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_DELETE");
                stmt.setString(1, resource.getStructureId().toString());
                stmt.setInt(2, minStrPublishTagToKeep);
                structureVersions = stmt.executeUpdate();
                m_sqlManager.closeAll(dbc, null, stmt, null);
            }

            // get the minimal resource publish tag to keep,